home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / etc / gdm / failsafeXinit < prev    next >
Text File  |  2008-10-23  |  7KB  |  212 lines

  1. #!/bin/bash
  2. # This provides a stripped down 'failsafe' mode for situations
  3. # where X is failing to start up.
  4.  
  5. # Author: Bryce W. Harrington <bryce@canonical.com>
  6.  
  7. # Copyright 2007, 2008 Canonical, Ltd
  8. #
  9. # This is free software; you may redistribute it and/or modify
  10. # it under the terms of the GNU General Public License as
  11. # published by the Free Software Foundation; either version 2,
  12. # or (at your option) any later version.
  13. #
  14. # This is distributed in the hope that it will be useful, but
  15. # WITHOUT ANY WARRANTY; without even the implied warranty of
  16. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. # GNU General Public License for more details.
  18. #
  19. # You should have received a copy of the GNU General Public License with
  20. # the Debian operating system, in /usr/share/common-licenses/GPL;  if
  21. # not, write to the Free Software Foundation, Inc., 59 Temple Place,
  22. # Suite 330, Boston, MA 02111-1307 USA
  23.  
  24. xorg_conf=$1
  25. with_gdm=$2
  26.  
  27. display=0
  28. xorg_log="/var/log/Xorg.${display}.log"
  29. gdm_log="/var/log/gdm/:${display}.log"
  30. apport_hook="/usr/share/apport/xserver_hook"
  31.  
  32. app_width=300
  33. app_height=300
  34. app_title="Ubuntu Failsafe-X"
  35.  
  36. timestamp=$(date +%y%m%d%H%M%S)
  37.  
  38. display_main_menu() {
  39.     zenity --list \
  40.         --radiolist \
  41.         --title "$app_title" \
  42.         --width $app_width --height $app_height \
  43.         --text "What would you like to do?" \
  44.         --column "" --column "Choice" --column "" \
  45.           TRUE   LOW_RES_MODE "Run Ubuntu in low-graphics mode for just this session" \
  46.           FALSE  RECONFIGURE "Reconfigure graphics" \
  47.           FALSE  TROUBLESHOOT "Troubleshoot the error" \
  48.         --hide-column 2
  49.  
  50. # TODO:          3 FILE_BUG "Report a bug about this failure" \
  51. }
  52.  
  53. display_reconfigure_menu() {
  54.     # TODO:  Only display SELECT_BACKUP if backups are available
  55.  
  56.     zenity --list \
  57.         --radiolist \
  58.         --title "$app_title : Reconfiguration" \
  59.         --text "How would you like to reconfigure your display?" \
  60.         --width $app_width --height $app_height \
  61.         --column "" --column "Choice" --column "" \
  62.           TRUE   RUN_DEXCONF "Use default (generic) configuration" \
  63.           FALSE  RUN_XORGCONF "Create new configuration for this hardware" \
  64.           FALSE  SELECT_BACKUP "Use your backed-up configuration" \
  65.         --hide-column 2
  66. }
  67.  
  68. display_troubleshooting_menu() {
  69.     zenity --list \
  70.         --radiolist \
  71.         --title "$app_title : Troubleshooting" \
  72.         --text "What information would you like to review?" \
  73.         --width $app_width --height $app_height \
  74.         --column "" --column "Choice" --column "" \
  75.           TRUE   VIEW_XORG_LOG "Review the xserver log file" \
  76.           FALSE  VIEW_GDM_LOG  "Review the startup errors" \
  77.           FALSE  EDIT_CONFIG   "Edit configuration file" \
  78.           FALSE  SAVE_CONFIG_LOGS   "Archive configuration and logs" \
  79.         --hide-column 2
  80. # TODO:          5 VERIFY_XORGCONF "Check configuration file"
  81. # TODO:          6 EXIT_TO_CONSOLE "Exit to console" \
  82. }
  83.  
  84. # TODO:  Should we just go ahead and file a bug for them without presenting an option?
  85. display_filebug_menu() {
  86.     # Run apport to file a bug
  87.     if [ -e $apport_hook ]; then
  88.         $apport_hook
  89.         if [ $? == 0]; then
  90.             zenity --info --text "A bug report has been written.\nYou can send it next time you log in."
  91.         else 
  92.             zenity --error --text "Your bug could not be recorded successfully.\n"
  93.         fi        
  94.     else
  95.         zenity --error --text "Cannot file bug:  $apport_hook is not present."
  96.     fi
  97. }
  98.  
  99. backup_xorg_conf() {
  100.     # TODO: backup xorg.conf more elegantly...
  101.     xorg_conf_backup="/etc/X11/xorg.conf-backup-${timestamp}"
  102.     cp /etc/X11/xorg_conf ${xorg_conf_backup}
  103.     if [ ! $? ]; then
  104.         return zenity --question --text "Your config could not be backed up.\nDo you want to continue anyway?\n"
  105.     fi
  106. }
  107.  
  108. run_dexconf() {
  109.     backup_xorg_conf || return 1
  110.  
  111.     dexconf
  112.     if [ $? == 0 ]; then
  113.         zenity --info --text "Your configuration has been restored to default,\nand your old configuration backed up.\nPlease restart.\n"
  114.     else
  115.         # TODO:  Copy $xorg_conf_backup to $xorg_conf if it exists
  116.         zenity --error --text "Failure restoring configuration to default.\nYour config has not been changed."
  117.     fi
  118. }
  119.  
  120. run_xorgconf() {
  121.     backup_xorg_conf || return 1
  122.  
  123.     Xorg :99 -configure
  124.     if [ $? == 0 ]; then
  125.         zenity --info --text "A new configuration has been generated,\nand your old configuration backed up.\nPlease restart.\n"
  126.     else
  127.         zenity --error --text "Could not generate a new configuration"
  128.     fi
  129. }
  130.  
  131. view_xorg_log() {
  132.     gedit $xorg_log
  133. }
  134.  
  135. view_gdm_log() {
  136.     gedit $gdm_log
  137. }
  138.  
  139. verify_xorgconf() {
  140.     # Run Alberto's xorg.conf checker (once it's available in main)
  141.     zenity --error --text "Sorry, this option is not implemented yet"
  142. }
  143.  
  144. edit_config() {
  145.     backup_xorg_conf || return 1
  146.  
  147.     gksu gedit "/etc/X11/xorg.conf"
  148. }
  149.  
  150. save_config_logs() {
  151.     xorg_backup_name=failsafeX-backup-${timestamp}
  152.     xorg_backup_dir=$(mktemp -d -t ${xorg_backup_name}.XXX)
  153.     xorg_backup_file=/var/log/${xorg_backup_name}.tar
  154.  
  155.     # cp $xorg_conf $xorg_backup_dir
  156.     cp /etc/X11/xorg.conf $xorg_backup_dir
  157.     cp $xorg_log $xorg_backup_dir
  158.     cp $gdm_log $xorg_backup_dir
  159.     tar -cf $xorg_backup_file $xorg_backup_dir
  160.     rm -rf $xorg_backup_dir
  161.  
  162.     zenity --info --text "Relevant configuration and log files have been saved to:\n$xorg_backup_file\nBug reports can be submitted at http://www.launchpad.net/ubuntu/.\n"
  163. }
  164.  
  165. # Scan Xorg.0.log for errors
  166. LOG_ERRORS=$(grep -e "^(EE)" $xorg_log)
  167.  
  168. if [ -z "$LOG_ERRORS" ]; then
  169.     zenity --warning --text "<big><b>Ubuntu is running in low-graphics mode</b></big>\n\nYour screen, graphics card, and input device settings\ncould not be detected correctly.  You will need to configure these yourself."
  170. else
  171.     zenity --warning --text "<big><b>Ubuntu is running in low-graphics mode</b></big>\n\nThe following error was encountered.  You may need\nto update your configuration to solve this.\n\n${LOG_ERRORS}"
  172. fi
  173.  
  174. # TODO: Add --window-icon "$app_icon" to all zenity windows
  175.  
  176. while : ; do
  177.     case "$choice" in
  178.         ## Main Menu ##
  179.         LOW_RES_MODE )    with_gdm="low-res"; break ;;
  180.         RECONFIGURE )     choice=$(display_reconfigure_menu) ;;
  181.         TROUBLESHOOT )    choice=$(display_troubleshooting_menu) ;;
  182.         FILE_BUG )        choice=$(display_filebug_menu) ;;
  183.  
  184.         ## Reconfigure Menu ##
  185.         RUN_DEXCONF )     choice="RECONFIGURE"; run_dexconf ;;
  186.         RUN_XORGCONF )    choice="RECONFIGURE"; run_xorgconf ;;
  187.         SELECT_BACKUP )   choice="RECONFIGURE"; ;;
  188.  
  189.         ## Troubleshooting Menu ##
  190.         VIEW_XORG_LOG )   choice="TROUBLESHOOT"; view_xorg_log ;;
  191.         VIEW_GDM_LOG )    choice="TROUBLESHOOT"; view_gdm_log ;;
  192.         VERIFY_XORGCONF ) choice="TROUBLESHOOT"; verify_xorgconf ;;
  193.         EDIT_CONFIG )     choice="TROUBLESHOOT"; edit_config ;;
  194.         SAVE_CONFIG_LOGS ) choice="TROUBLESHOOT"; save_config_logs ;;
  195.         EXIT_TO_CONSOLE ) with_gdm=""; break ;;
  196.  
  197.         EXIT )          break ;;
  198.         *)              choice=$(display_main_menu) || break ;;
  199.     esac
  200. done
  201.  
  202. zenity --info --text "Stand by one minute while the display restarts..."
  203.  
  204. if [ "x$with_gdm" = "xwith-gdm" ]; then
  205.     export XORGCONFIG="/etc/X11/xorg.conf"
  206.     /etc/init.d/gdm restart
  207. elif [ "x$with_gdm" = "xlow-res" ]; then
  208.     export XORGCONFIG=${xorg_conf}
  209.     /etc/init.d/gdm restart
  210. fi
  211.  
  212.